Hibernate: Working Flow
Hibernate হলো একটি জনপ্রিয় Object-Relational Mapping (ORM) ফ্রেমওয়ার্ক যা Java অ্যাপ্লিকেশনের ডাটাবেসের সাথে যোগাযোগের জন্য ব্যবহৃত হয়। Hibernate ডেভেলপারদের জন্য Java অবজেক্টগুলিকে ডাটাবেস টেবিলের সারির সাথে মাপসই করতে সহজ করে তোলে, এবং এটি JDBC (Java Database Connectivity) এর চেয়ে অনেক বেশি কার্যকরী এবং সুবিধাজনক। Hibernate ORM ডেটাবেস অপারেশনের জন্য CRUD (Create, Read, Update, Delete) অপারেশনগুলো স্বয়ংক্রিয়ভাবে পরিচালনা করে।
Hibernate এর কাজের প্রবাহ (Working Flow) সাধারনত ৬টি প্রধান পর্যায়ে বিভক্ত:
Hibernate Working Flow
1. Configuration Phase (Hibernate Configuration)
Hibernate ব্যবহারের প্রথম ধাপ হলো configuration সেট করা। Hibernate-কে ডাটাবেসের সাথে সংযোগ করতে একটি কনফিগারেশন ফাইল (hibernate.cfg.xml) প্রয়োজন হয়, যাতে ডাটাবেস সংযোগের বিস্তারিত যেমন JDBC ইউআরএল, ইউজারনেম, পাসওয়ার্ড এবং ড্রাইভার ক্লাস থাকে। এছাড়া hibernate.cfg.xml ফাইলটি হাইবারনেটের সমস্ত প্রয়োজনীয় কনফিগারেশন সেট করে দেয়, যেমন ডাটাবেসের হিব্রিডেটিং কৌশল এবং ক্যাশিং কনফিগারেশন।
hibernate.cfg.xml ফাইলের উদাহরণ:
<?xml version="1.0" encoding="UTF-8"?>
<hibernate-configuration>
<session-factory>
<!-- JDBC Database connection settings -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.connection.driver_class">com.mysql.cj.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/yourdb</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">password</property>
<!-- JDBC connection pool settings -->
<property name="hibernate.c3p0.min_size">5</property>
<property name="hibernate.c3p0.max_size">20</property>
<property name="hibernate.c3p0.timeout">300</property>
<property name="hibernate.c3p0.max_statements">50</property>
<property name="hibernate.c3p0.idle_test_period">3000</property>
<!-- Specify dialect -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- Echo all executed SQL to stdout -->
<property name="hibernate.show_sql">true</property>
<!-- Drop and re-create the database schema on startup -->
<property name="hibernate.hbm2ddl.auto">update</property>
<!-- Enable Hibernate's automatic session context management -->
<property name="hibernate.current_session_context_class">thread</property>
<!-- Disable the second-level cache -->
<property name="hibernate.cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
</session-factory>
</hibernate-configuration>
2. SessionFactory Creation
Hibernate কনফিগারেশন ফাইলটির মাধ্যমে SessionFactory তৈরি করা হয়। SessionFactory হলো Hibernate এর মস্তিষ্ক, যা Session অবজেক্ট তৈরি করতে ব্যবহৃত হয়। SessionFactory একবার তৈরি হলে, এটি সিস্টেমের মাধ্যমে পুনরায় ব্যবহৃত হতে পারে।
SessionFactory factory = new Configuration().configure("hibernate.cfg.xml")
.addAnnotatedClass(Employee.class)
.buildSessionFactory();
এখানে Employee.class হলো একটি mapped entity ক্লাস, যা Hibernate-কে ডাটাবেস টেবিলের সাথে সম্পর্কিত করে।
3. Session Creation
SessionFactory তৈরি হওয়ার পর, Hibernate এর Session অবজেক্ট তৈরি করা হয়। Session হল Hibernate এর সাথে ডাটাবেসের ইন্টারঅ্যাকশন করার জন্য ব্যবহৃত প্রধান অবজেক্ট। এটি CRUD operations (Create, Read, Update, Delete) পরিচালনা করতে সাহায্য করে।
Session session = factory.getCurrentSession();
4. Begin Transaction
Hibernate এ ডাটাবেস অপারেশন (যেমন, ইনসার্ট, আপডেট, ডিলিট) করতে transaction শুরু করা প্রয়োজন। এটি ডাটাবেস অপারেশনগুলোকে একটি একক ইউনিট হিসেবে কার্যকর করতে সাহায্য করে, যার ফলে ডেটা সঠিকভাবে আপডেট হয় এবং এক্সেপশন বা অন্য কোনো সমস্যা হলে রোলব্যাক করা যায়।
session.beginTransaction();
5. Perform CRUD Operations
এবার আপনি Hibernate এর মাধ্যমে ডাটাবেসে CRUD (Create, Read, Update, Delete) অপারেশন করতে পারবেন। Hibernate জাভা অবজেক্টগুলোকে ডাটাবেস টেবিলের সারিতে ম্যাপ করতে ব্যবহৃত হয়।
- Create (Insert):
Employee employee = new Employee("John", "Doe", "john.doe@example.com");
session.save(employee);
- Read (Select):
Employee employee = session.get(Employee.class, 1);
System.out.println(employee);
- Update:
employee.setEmail("john.doe@newdomain.com");
session.update(employee);
- Delete:
session.delete(employee);
6. Commit Transaction
ডাটাবেস অপারেশন সম্পন্ন হওয়ার পর transaction কমিট করতে হয়। এটি ডাটাবেসে পরিবর্তনগুলো স্থায়ী করে দেয়।
session.getTransaction().commit();
7. Close the Session
অপারেশন শেষে সেশন বন্ধ করা প্রয়োজন। এটি সেশনটির সকল রিসোর্স মুক্ত করে দেয় এবং ডাটাবেসের সাথে সংযোগ বন্ধ করে।
session.close();
Hibernate Working Flow: Summary
- Hibernate Configuration:
hibernate.cfg.xmlফাইলের মাধ্যমে ডাটাবেস কনফিগারেশন নির্ধারণ করা হয়। - SessionFactory Creation:
SessionFactoryতৈরি হয় যা পরবর্তীতে সেশন তৈরি করার জন্য ব্যবহৃত হয়। - Session Creation:
Sessionঅবজেক্ট তৈরি করা হয়, যা ডাটাবেসের সাথে যোগাযোগের জন্য ব্যবহৃত হয়। - Begin Transaction: ট্রানজেকশন শুরু হয় যাতে ডাটাবেস অপারেশন একটি একক ইউনিট হিসেবে কার্যকর হতে পারে।
- Perform CRUD Operations: ডাটাবেসে CRUD অপারেশনগুলো (Create, Read, Update, Delete) পরিচালনা করা হয়।
- Commit Transaction: ট্রানজেকশন কমিট করা হয়, যাতে ডাটাবেসের পরিবর্তনগুলি স্থায়ী হয়।
- Close the Session: সেশন বন্ধ করা হয় এবং সমস্ত রিসোর্স মুক্ত করা হয়।
Hibernate এর কাজের প্রবাহ (working flow) খুবই সোজা এবং কার্যকরী। এটি ডাটাবেসের সাথে সংযোগ স্থাপন, অবজেক্টগুলোকে ডাটাবেস টেবিলের সাথে ম্যাপ করা, এবং CRUD অপারেশনগুলো সহজে পরিচালনা করার জন্য একটি শক্তিশালী টুল। এই প্রবাহটি সঠিকভাবে অনুসরণ করলে, আপনি Hibernate-এ কার্যকরভাবে ডেটাবেস অপারেশন সম্পাদন করতে পারবেন এবং আপনার অ্যাপ্লিকেশনকে আরও মডুলার এবং স্কেলেবল বানাতে পারবেন।
Read more